package com.bosssoft.springboot.demo2.controller;

import com.bosssoft.springboot.demo2.exception.GlobalException;
import com.bosssoft.springboot.demo2.msg.Greeting;
import com.bosssoft.springboot.demo2.msg.HelloMsg;
import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Controller;
import org.springframework.web.util.HtmlUtils;

/**
 * @description 逻辑控制器 通过socket接受从前端发送的信息，将其封装
 * 处理所接受的信息，通过socket对客户端进行响应
 * @author ChenTong
 * @date 2020-6-10
 */
@Slf4j
@Controller
public class GreetingController {


    /**
     * MessageMapping注解类似与Get Post 如果消息传到了‘/hello’则调用该注解修饰的方法
     * @param msg 客户端发送来的消息
     * @return 服务端返回的消息将以JSON形式返回 返回的信息将会向所有”topic/greetings（由注解SendTo指定）的订阅进行广播
     */
    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting(HelloMsg msg){
        try {
            Thread.sleep(1000);
            return new Greeting("Server Response:"+"Hello "+ HtmlUtils.htmlEscape(msg.getName())+"!");
        } catch (InterruptedException e) {
            log.error(e.getMessage(),e);
            Thread.currentThread().interrupt();
            throw new GlobalException(e.getMessage(),e);
        }
    }
}
